package insignia;

import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.times;

import java.util.ArrayList;
import java.util.List;

import junit.framework.Assert;

import model.Usuario.UsuarioSimple;
import model.insigniaYlogros.InsigniaSimple;
import model.insigniaYlogros.Logro;
import model.insigniaYlogros.LogroUsDeCantidadDeFavoritos;
import model.insigniaYlogros.LogroUsDeCantidadDeRespuestas;

import org.junit.Before;
import org.junit.Test;

public class TestInsigniaSimple {
	UsuarioSimple us;
	InsigniaSimple i;
	
	Logro l;
    Logro l2;

	@Before
	public void setUp() throws Exception {
		us=mock(UsuarioSimple.class);
		l=mock(LogroUsDeCantidadDeFavoritos.class);
		l2=mock(LogroUsDeCantidadDeRespuestas.class);
		i=new InsigniaSimple("asd", l,l2);
		when(l.seCumple(us)).thenReturn(true);
		when(l2.seCumple(us)).thenReturn(false);
	}
	@Test
	public void testSeCumple()
	{
		Assert.assertEquals(false, i.seCumple(us));
		when(l2.seCumple(us)).thenReturn(true);
		Assert.assertEquals(true, i.seCumple(us));
	}

	@Test
	public void testLogrosConseguidos() {
		List<Logro> logros=new ArrayList<Logro>();
		logros.add(l);
		Assert.assertEquals(logros, i.getLogrosConseguidosPara(us));
		verify(l,times(1)).seCumple(us);
	}
	@Test
	public void testLogrosFaltantes() {
		List<Logro> logros=new ArrayList<Logro>();
		logros.add(l2);
		Assert.assertEquals(logros, i.getLogrosRestantePara(us));
		verify(l2,times(1)).seCumple(us);
	}

}
